﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using System.Security.Permissions;
using Bovespa.Infra.Services;
using Bovespa.Infra.Services.Transactions;
using Bovespa.Infra.Services.Security;
using Bovespa.Infra.Logging.Audit;
using Bovespa.Infra.ExceptionHandling;

namespace Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos
{
    /// <summary>
    /// Contrato de servico "IProduto".
    /// </summary>
    [ExceptionShielding]
    [Authentication]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Produto/ServiceContracts/2010/08", Name = "IProduto", SessionMode = SessionMode.Allowed)]
    public interface IProduto
    {
        /// <summary>
        /// Recupera uma lista de entidades de negocio "Produto".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarProduto")]
        List<Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto> ConsultarProduto();

        /// <summary>
        /// Recupera uma lista de entidades de negocio "Produto" por hierarquia.
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarProdutoPorHierarquia")]
        List<Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto> ConsultarProdutoPorHierarquia();

        /// <summary>
        /// Recupera uma lista de entidades de negocio "Produto".
        /// </summary>
        /*[FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarProduto")]
        List<Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto> ConsultarProduto(int entrada);*/

        /// <summary>
        /// Recupera uma entidade de negocio "Produto".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterProduto")]
        Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto ObterProduto(int entrada);

        /// <summary>
        /// Persiste uma entidade de negocio "Produto".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "InserirProduto")]
        void InserirProduto(Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto entrada);

        /// <summary>
        /// Remove uma entidade de negocio "Produto".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirProduto")]
        void ExcluirProduto(int entrada);

        /// <summary>
        /// Atualiza uma entidade de negocio "Produto".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AtualizarProduto")]
        void AtualizarProduto(Bovespa.Sinacor.Servico.BaseConhecimento.Produto.Servicos.Contratos.Produto entrada);
    }
}
